import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;

public class Ejercicio2 {
	
	/**
	 *  Complejidad: O(2 * |factoresPrimos|)
	 * @param factoresPrimos es su descomposicion en factores primos
	 * @param number es el numero en si//
	 * @return suma de sus divisores
	 */
	static Long getSumaDivisores(List <Long> factoresPrimos, Long number){
		Long suma = new Long(1);
		
		TreeMap<Long, Integer> cuentaPrimos = new TreeMap<Long, Integer>();

		for (Long primo : factoresPrimos) {
			if(cuentaPrimos.containsKey(primo)){
				cuentaPrimos.put(primo,cuentaPrimos.get(primo)+1); 
			}else{//
				cuentaPrimos.put(primo,1);
			}
		}
		
		for (Long primo : cuentaPrimos.keySet()) {
			Long a1 = primo;
			int n = cuentaPrimos.get(primo);
			
			suma *= ((Math.pow(a1, n+1) - a1 ) / (a1 - 1) ) + 1;
			
		}
		
		return suma - number;
	}
	
	
	static List<Long> factorizar(Long n) {
	    //almacenaremos los resultados de la
	    //factorización en una lista
	    List<Long> l = new ArrayList<Long>();
	    Long num1=n;
	    if(n==1){
	    	l.add(n);
	    	return l;
	    }
	    //Mientras podamos dividir por 2
	    //el dos es un factor
	    while (num1 % 2 == 0) {
	        l.add(new Long(2));//
	        num1 = num1 / 2;
	    }//while
	 
	    //ahora probaremos con los impares,
	    //empezando por el 3
	    Long cuenta = new Long(3);
	    Double raiz = (Double) Math.sqrt(num1);
	 
	    while (cuenta <= Math.ceil(raiz) && num1 > 1) {
	        if (num1 % cuenta == 0)
	        {
	            l.add(cuenta);
	            num1 = num1 / cuenta;
	        }
	        else
	        {
	            cuenta = cuenta + 2;
	        }
	    }
	    if (num1 > 1)
	        l.add(num1);
	    return l;
	}
	
	static Long buscarAmigo(Long numero){
		
		long begin = System.nanoTime();
		Long amigo = Ejercicio2.getSumaDivisores(Ejercicio2.factorizar(numero),numero);
		Long sumaDivAmigos = Ejercicio2.getSumaDivisores(Ejercicio2.factorizar(amigo),amigo);
		long end = System.nanoTime();
		
		//System.out.println(end - begin);
		System.out.println(numero);
		if(sumaDivAmigos.equals(numero) && !numero.equals(amigo)){
			return amigo;
		}
		
		return new Long(0);
	}
	
	public static void main(String[] args) {
		
		try {
			leeteElArchivo();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		/*for (int i = 1; i < 1000; i++) {			
			Long result = Ejercicio2.buscarAmigo(new Long(i));
			if(!result.equals(new Long(0))) System.out.println(Math.abs(result-i));
		}*/
	}
	
	public static void leeteElArchivo() throws Exception {

		BufferedWriter bw = null;
		bw = new BufferedWriter(new FileWriter(new File("Tp1Ej2.out")));
		
		BufferedReader br = null;
		br = new BufferedReader(new FileReader(new File("Tp1Ej2.in")));
		String linea = br.readLine().trim();
		while (Long.parseLong(linea) != -1) {
			bw.append(buscarAmigo(Long.parseLong(linea)).toString());
			bw.newLine();
			linea = br.readLine().trim();
		}
		br.close();
		bw.close();
	}

}


